package com.system.boot.rbac.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.system.api.rbac.entity.po.SysMenu;
import com.system.api.rbac.entity.vo.MenuTreeVo;
import jakarta.validation.Valid;
import org.springframework.validation.annotation.Validated;
import org.yang.common.core.exception.BaseException;
import org.yang.database.orm.entity.BaseQuery;

import java.util.List;

/**
 * @author: lslands
 * @description:
 * @version：v1.0
 * @date: 2024/6/1 23:21
 */
@Validated
public interface MenuService extends IService<SysMenu> {

    /**
     * 判断名称是否重复
     * @param title 名称
     * @author lslands
     * @date 2024/5/16 00:57
     * @throws BaseException 字段重复异常
     */
    void isExists(String title) throws BaseException;

    /**
     * 插入
     * @param record 插入对象
     * @return int
     * @throws BaseException 空指针异常
     */
    int handInsert(@Valid SysMenu record) throws BaseException;

    /**
     * 根据主键ID修改
     * @param record 修改对象
     * @return int
     * @throws BaseException 修改异常
     */
    int handUpdateById(@Valid SysMenu record) throws BaseException;

    /**
     * 根据主键ID修改状态
     * @param id 主键ID
     * @param enabled 状态
     * @param revision 乐观锁版本
     * @return int
     * @throws BaseException 修改状态异常
     */
    int handEnabledById(Long id,Integer enabled,Integer revision) throws BaseException;


    /**
     * 查询菜单列表数据
     * @param record 分页基础查询参数
     * @param roles 角色列表
     * @return 菜单树
     */
    List<MenuTreeVo> getList(SysMenu record,List<String> roles) throws BaseException;

    /**
     * 单条删除(逻辑);
     * @param id 主键ID
     * @return int
     * @throws BaseException 删除异常
     */
    int deleteOne(Long id) throws BaseException;


    /**
     * 批量删除
     * @param delete 是否物理删除
     * @param ids ids集
     * @return int
     * @throws BaseException 删除异常
     */
    int deleteBatch(Boolean delete,List<Long> ids) throws BaseException;


    /**
     * 刷新缓存
     * @param flag 是否刷新
     */
    void resetCache(boolean flag);
}
